// 二次封装axios
import axios from 'axios'
/* 提示信息 */
import { message } from 'antd'
/* 在非组件js中操作路由 */ 
import { createBrowserHistory } from 'history'
/* 创建history对象 */
const history = createBrowserHistory();
/* 初始化hide为null */
let hide = null;
// 创建一个axios实例
const request = axios.create({
  /* 基础路径 */
  baseURL: '/api',
  /* 响应超时时间 */
  timeout: 8000
})

// 添加请求和响应拦截器
request.interceptors.request.use(function (config) {
  /* 加载的信息 */
  hide = message.loading('加载中...', 0);
  /* 获取token的数据 */
  const token = localStorage.getItem('token');
  /* 如果有token */
  if (token) {
    /* 设置在请求头中传递给后端 */
    config.headers.token = token;
  }
  return config
}, function (error) {
  /* 错误的时候隐藏 */
  hide();
  return Promise.reject(error)
})

request.interceptors.response.use(function (res) {
  hide();
  /* 返回401 403错误 */
  const errCode = [401, 403];
  /* 如果服务器返回的状态码中有401 或者 403时 */
  if (errCode.includes(res.data.code)) {
    /* 弹出提示信息 */
    message.error('toekn没有传过期',1,()=>{
      /* 跳转到登录页 */
      history.replace('/login');
      /* 自己手动刷新 否则地址栏改变 但是页面无法显示出来 */
      history.go(0);
    })
  }
  return res
}, function (error) {
  /* 错误时隐藏 */
  hide();
  return Promise.reject(error)
})
/* 导出二次封装的axios */
export default request
